package demo03.ObserverModel;

import java.util.ArrayList;

/**
 * 天气预报数据的实现类 （实现主题接口观察者模式） 被观察  一对多松耦合
 * */
public class WeatherData implements Subject{
	private ArrayList observers;//用于记录观察者   ，在构造器中实现
	private float temp; //温度
	private float humidity;//湿度
	private float pressure;//气压
	
	//构造器
	public WeatherData() {
	  observers = new ArrayList();
	}
	
	//注册时加入Arraylist
	public void registerObserver(Object obj) {
		observers.add(obj);
		
	}
	//删除
	public void removeObserver(Object obj) {
	int i = observers.indexOf(obj);//不存在 -1
	if(i>=0){
		observers.remove(i);
		
	}
		
	}

	//通知方法（通知全部观察者都实现了update方法）
	public void notifyObservers() {
	 for(int i=0;i<observers.size();i++){
		Observer obs = (Observer) observers.get(i);
		obs.update(temp, humidity, pressure);;
	 }
	}

	//何时通知观察者（当气象数据修改时）
	public void measurementChanged(){
		notifyObservers();
	}

	//此处用于模拟生产数据
	public void setWeatherData(float temp, float humidity, float pressure) {	
		this.temp = temp;
		this.humidity = humidity;
		this.pressure = pressure;
		measurementChanged();
	}
	
	
}
